tFix for proper handling of the case where Drug[x].Cheap = Drug[x].Expensive = … | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a5f39227a993d419363e13659840972d65072b0d | |
parent 12907924f0a34e20e73ab2747830b60c4439aacd | |
Author: Ben Webb <[email protected]> | |
Date: Mon, 25 Feb 2002 18:21:35 +0000 | |
Fix for proper handling of the case where | |
Drug[x].Cheap = Drug[x].Expensive = TRUE | |
Diffstat: | |
M src/serverside.c | 107 +++++++++++++++++------------… | |
M src/serverside.h | 1 - | |
2 files changed, 59 insertions(+), 49 deletions(-) | |
--- | |
diff --git a/src/serverside.c b/src/serverside.c | |
t@@ -3020,60 +3020,22 @@ int OfferObject(Player *To, gboolean ForceBitch) | |
return 0; | |
} | |
-/* | |
- * Sends details of drug prices to player "To". If "DisplayBusts" | |
- * is TRUE, also regenerates drug prices and sends details of | |
- * special events such as drug busts. | |
- */ | |
-void SendDrugsHere(Player *To, gboolean DisplayBusts) | |
-{ | |
- int i; | |
- gchar *Deal, *prstr; | |
- GString *text; | |
- gboolean First; | |
- | |
- Deal = g_malloc0(NumDrug); | |
- if (DisplayBusts) | |
- GenerateDrugsHere(To, Deal); | |
- | |
- text = g_string_new(NULL); | |
- First = TRUE; | |
- if (DisplayBusts) | |
- for (i = 0; i < NumDrug; i++) | |
- if (Deal[i]) { | |
- if (!First) | |
- g_string_append_c(text, '^'); | |
- if (Drug[i].Expensive) { | |
- dpg_string_sprintfa(text, Deal[i] == 1 ? Drugs.ExpensiveStr1 : | |
- Drugs.ExpensiveStr2, Drug[i].Name); | |
- } else if (Drug[i].Cheap) { | |
- g_string_append(text, Drug[i].CheapStr); | |
- } | |
- First = FALSE; | |
- } | |
- if (!First) | |
- SendPrintMessage(NULL, C_NONE, To, text->str); | |
- g_string_truncate(text, 0); | |
- for (i = 0; i < NumDrug; i++) { | |
- g_string_sprintfa(text, "%s^", | |
- (prstr = pricetostr(To->Drugs[i].Price))); | |
- g_free(prstr); | |
- } | |
- SendServerMessage(NULL, C_NONE, C_DRUGHERE, To, text->str); | |
- g_string_free(text, TRUE); | |
-} | |
+/* Whether a particular drug is especially cheap or expensive */ | |
+enum DealType { | |
+ DT_NORMAL, DT_CHEAP, DT_EXPENSIVE | |
+}; | |
/* | |
* Generates drug prices and drug busts etc. for player "To" | |
- * "Deal" is an array of chars of size NumDrug. | |
+ * "Deal" is an array of size NumDrug. | |
*/ | |
-void GenerateDrugsHere(Player *To, gchar *Deal) | |
+static void GenerateDrugsHere(Player *To, enum DealType *Deal) | |
{ | |
int NumEvents, NumDrugs, NumRandom, i; | |
for (i = 0; i < NumDrug; i++) { | |
To->Drugs[i].Price = 0; | |
- Deal[i] = 0; | |
+ Deal[i] = DT_NORMAL; | |
} | |
NumEvents = 0; | |
if (brandom(0, 100) < 70) | |
t@@ -3085,16 +3047,16 @@ void GenerateDrugsHere(Player *To, gchar *Deal) | |
NumDrugs = 0; | |
while (NumEvents > 0) { | |
i = brandom(0, NumDrug); | |
- if (Deal[i] != 0) | |
+ if (Deal[i] != DT_NORMAL) | |
continue; | |
if (Drug[i].Expensive && (!Drug[i].Cheap || brandom(0, 100) < 50)) { | |
- Deal[i] = brandom(1, 3); | |
+ Deal[i] = DT_EXPENSIVE; | |
To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice) | |
* Drugs.ExpensiveMultiply; | |
NumDrugs++; | |
NumEvents--; | |
} else if (Drug[i].Cheap) { | |
- Deal[i] = 1; | |
+ Deal[i] = DT_CHEAP; | |
To->Drugs[i].Price = prandom(Drug[i].MinPrice, Drug[i].MaxPrice) | |
/ Drugs.CheapDivide; | |
NumDrugs++; | |
t@@ -3117,6 +3079,55 @@ void GenerateDrugsHere(Player *To, gchar *Deal) | |
} | |
/* | |
+ * Sends details of drug prices to player "To". If "DisplayBusts" | |
+ * is TRUE, also regenerates drug prices and sends details of | |
+ * special events such as drug busts. | |
+ */ | |
+void SendDrugsHere(Player *To, gboolean DisplayBusts) | |
+{ | |
+ int i; | |
+ enum DealType *Deal = NULL; | |
+ gchar *prstr; | |
+ GString *text; | |
+ gboolean First; | |
+ | |
+ Deal = g_new0(enum DealType, NumDrug); | |
+ if (DisplayBusts) | |
+ GenerateDrugsHere(To, Deal); | |
+ | |
+ text = g_string_new(NULL); | |
+ First = TRUE; | |
+ if (DisplayBusts) { | |
+ for (i = 0; i < NumDrug; i++) { | |
+ if (Deal[i] != DT_NORMAL) { | |
+ if (!First) | |
+ g_string_append_c(text, '^'); | |
+ if (Deal[i] == DT_CHEAP) { | |
+ g_string_append(text, Drug[i].CheapStr); | |
+ } else { | |
+ dpg_string_sprintfa(text, brandom(0, 100) < 50 | |
+ ? Drugs.ExpensiveStr1 : Drugs.ExpensiveStr2, | |
+ Drug[i].Name); | |
+ } | |
+ First = FALSE; | |
+ } | |
+ } | |
+ } | |
+ g_free(Deal); | |
+ | |
+ if (!First) | |
+ SendPrintMessage(NULL, C_NONE, To, text->str); | |
+ g_string_truncate(text, 0); | |
+ for (i = 0; i < NumDrug; i++) { | |
+ g_string_sprintfa(text, "%s^", | |
+ (prstr = pricetostr(To->Drugs[i].Price))); | |
+ g_free(prstr); | |
+ } | |
+ SendServerMessage(NULL, C_NONE, C_DRUGHERE, To, text->str); | |
+ g_string_free(text, TRUE); | |
+} | |
+ | |
+/* | |
* Handles the incoming message in "answer" from player "From" and | |
* intended for player "To". | |
*/ | |
diff --git a/src/serverside.h b/src/serverside.h | |
t@@ -44,7 +44,6 @@ void FinishGame(Player *Play, char *Message); | |
void SendHighScores(Player *Play, gboolean EndGame, char *Message); | |
void SendEvent(Player *To); | |
void SendDrugsHere(Player *To, gboolean DisplayBusts); | |
-void GenerateDrugsHere(Player *To, char *Deal); | |
void BuyObject(Player *From, char *data); | |
int RandomOffer(Player *To); | |
void HandleAnswer(Player *From, Player *To, char *answer); |